{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#导入必要的模块\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6</td>\n",
       "      <td>148</td>\n",
       "      <td>72</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "      <td>33.6</td>\n",
       "      <td>0.627</td>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>85</td>\n",
       "      <td>66</td>\n",
       "      <td>29</td>\n",
       "      <td>0</td>\n",
       "      <td>26.6</td>\n",
       "      <td>0.351</td>\n",
       "      <td>31</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>183</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>23.3</td>\n",
       "      <td>0.672</td>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>89</td>\n",
       "      <td>66</td>\n",
       "      <td>23</td>\n",
       "      <td>94</td>\n",
       "      <td>28.1</td>\n",
       "      <td>0.167</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>137</td>\n",
       "      <td>40</td>\n",
       "      <td>35</td>\n",
       "      <td>168</td>\n",
       "      <td>43.1</td>\n",
       "      <td>2.288</td>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \\\n",
       "0            6      148             72             35        0  33.6   \n",
       "1            1       85             66             29        0  26.6   \n",
       "2            8      183             64              0        0  23.3   \n",
       "3            1       89             66             23       94  28.1   \n",
       "4            0      137             40             35      168  43.1   \n",
       "\n",
       "   DiabetesPedigreeFunction  Age  Outcome  \n",
       "0                     0.627   50        1  \n",
       "1                     0.351   31        0  \n",
       "2                     0.672   32        1  \n",
       "3                     0.167   21        0  \n",
       "4                     2.288   33        1  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#读取数据\n",
    "data=pd.read_csv(\"diabetes.csv\")\n",
    "#显示数据的前五行信息\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 768 entries, 0 to 767\n",
      "Data columns (total 9 columns):\n",
      "Pregnancies                 768 non-null int64\n",
      "Glucose                     768 non-null int64\n",
      "BloodPressure               768 non-null int64\n",
      "SkinThickness               768 non-null int64\n",
      "Insulin                     768 non-null int64\n",
      "BMI                         768 non-null float64\n",
      "DiabetesPedigreeFunction    768 non-null float64\n",
      "Age                         768 non-null int64\n",
      "Outcome                     768 non-null int64\n",
      "dtypes: float64(2), int64(7)\n",
      "memory usage: 54.1 KB\n"
     ]
    }
   ],
   "source": [
    "#显示数据的基本信息，是否有空值，数据所属类型\n",
    "data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于数据中的缺失值用零值表示，所以该命令查找不出缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.845052</td>\n",
       "      <td>120.894531</td>\n",
       "      <td>69.105469</td>\n",
       "      <td>20.536458</td>\n",
       "      <td>79.799479</td>\n",
       "      <td>31.992578</td>\n",
       "      <td>0.471876</td>\n",
       "      <td>33.240885</td>\n",
       "      <td>0.348958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>3.369578</td>\n",
       "      <td>31.972618</td>\n",
       "      <td>19.355807</td>\n",
       "      <td>15.952218</td>\n",
       "      <td>115.244002</td>\n",
       "      <td>7.884160</td>\n",
       "      <td>0.331329</td>\n",
       "      <td>11.760232</td>\n",
       "      <td>0.476951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.078000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>27.300000</td>\n",
       "      <td>0.243750</td>\n",
       "      <td>24.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>117.000000</td>\n",
       "      <td>72.000000</td>\n",
       "      <td>23.000000</td>\n",
       "      <td>30.500000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>0.372500</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>6.000000</td>\n",
       "      <td>140.250000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>127.250000</td>\n",
       "      <td>36.600000</td>\n",
       "      <td>0.626250</td>\n",
       "      <td>41.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>17.000000</td>\n",
       "      <td>199.000000</td>\n",
       "      <td>122.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>846.000000</td>\n",
       "      <td>67.100000</td>\n",
       "      <td>2.420000</td>\n",
       "      <td>81.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Pregnancies     Glucose  BloodPressure  SkinThickness     Insulin  \\\n",
       "count   768.000000  768.000000     768.000000     768.000000  768.000000   \n",
       "mean      3.845052  120.894531      69.105469      20.536458   79.799479   \n",
       "std       3.369578   31.972618      19.355807      15.952218  115.244002   \n",
       "min       0.000000    0.000000       0.000000       0.000000    0.000000   \n",
       "25%       1.000000   99.000000      62.000000       0.000000    0.000000   \n",
       "50%       3.000000  117.000000      72.000000      23.000000   30.500000   \n",
       "75%       6.000000  140.250000      80.000000      32.000000  127.250000   \n",
       "max      17.000000  199.000000     122.000000      99.000000  846.000000   \n",
       "\n",
       "              BMI  DiabetesPedigreeFunction         Age     Outcome  \n",
       "count  768.000000                768.000000  768.000000  768.000000  \n",
       "mean    31.992578                  0.471876   33.240885    0.348958  \n",
       "std      7.884160                  0.331329   11.760232    0.476951  \n",
       "min      0.000000                  0.078000   21.000000    0.000000  \n",
       "25%     27.300000                  0.243750   24.000000    0.000000  \n",
       "50%     32.000000                  0.372500   29.000000    0.000000  \n",
       "75%     36.600000                  0.626250   41.000000    1.000000  \n",
       "max     67.100000                  2.420000   81.000000    1.000000  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看各属性的统计特性\n",
    "data.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Number of Occurrences')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7b84f28>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#查看目标值的分布，以及各类样本分布是否均衡\n",
    "sns.countplot(data.Outcome)\n",
    "plt.xlabel(\"Outcome\")\n",
    "plt.ylabel(\"Number of Occurrences\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从图可知是两类分布问题，y=1的样本数量在y=0样本数的一半左右,后续的模型训练中直接使用默认的class_weight"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#分离出模型的输入特征与输出特征\n",
    "y_train=data['Outcome']\n",
    "X_train=data.drop(['Outcome'],axis=1)\n",
    "X_train=np.array(X_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#对缺失值作插值处理，对输入特征中为零值的样本填入该特征的众数\n",
    "from sklearn.preprocessing import Imputer\n",
    "imputer=Imputer(missing_values=0,strategy=\"most_frequent\",axis=0,copy=False)\n",
    "X_train=imputer.fit_transform(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#对特征进行标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "ss=StandardScaler()\n",
    "X_train=ss.fit_transform(X_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 模型训练"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. 缺省的Logistic Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
       "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
       "          verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#利用LogisticRegression模型训练样本数据\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "lr=LogisticRegression()\n",
    "lr.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "logloss of each fold is: [ 0.50621855  0.52714048  0.4774384   0.45143155  0.48231172]\n",
      "cv logloss is: 0.488908140039\n"
     ]
    }
   ],
   "source": [
    "#利用交叉验证评估模型性能及进行参数调优，由于要求随机选择20%的数据作为测试数据集，故取cv=5进行五折交叉验证\n",
    "from sklearn.model_selection import cross_val_score\n",
    "loss=cross_val_score(lr,X_train,y_train,cv=5,scoring='neg_log_loss')\n",
    "print(\"logloss of each fold is:\",-loss)\n",
    "print(\"cv logloss is:\",-loss.mean())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 正则化的LogisticRegression及参数调优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "LogisticRegression的超参数包括正则系数与正则函数类别"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise',\n",
       "       estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
       "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
       "          verbose=0, warm_start=False),\n",
       "       fit_params=None, iid=True, n_jobs=1,\n",
       "       param_grid={'penalty': ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#导入GridSearchCV进行穷举法对试验参数集合进行验证\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "#设置候选参数集合，包括正则函数类别与正则系数\n",
    "penaltys=['l1','l2']\n",
    "Cs=[0.001,0.01,0.1,1,10,100,1000]\n",
    "tuned_parameters=dict(penalty=penaltys,C=Cs)\n",
    "lr_penalty=LogisticRegression()\n",
    "#将设置好的参数集合传入GridSearchCV实例中\n",
    "grid=GridSearchCV(lr_penalty,tuned_parameters,cv=5,scoring='neg_log_loss')\n",
    "#利用设置好参数的GridSearchCV实例训练数据\n",
    "grid.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 0.00320005,  0.00200024,  0.00520039,  0.00280008,  0.00760045,\n",
       "         0.00340018,  0.0120007 ,  0.00460019,  0.01120067,  0.00420027,\n",
       "         0.01160073,  0.00520029,  0.01020045,  0.00480032]),\n",
       " 'mean_score_time': array([ 0.00160017,  0.00100007,  0.00120001,  0.00100007,  0.00220017,\n",
       "         0.00120006,  0.00100007,  0.00140009,  0.00099998,  0.00120006,\n",
       "         0.00120001,  0.00140018,  0.00100021,  0.00159998]),\n",
       " 'mean_test_score': array([-0.64073695, -0.58841795, -0.59235031, -0.58181896, -0.52058046,\n",
       "        -0.55151555, -0.4761588 , -0.48896553, -0.47591151, -0.47582891,\n",
       "        -0.47596015, -0.47582129, -0.47595329, -0.47587642]),\n",
       " 'mean_train_score': array([-0.6388024 , -0.5803189 , -0.58658451, -0.57174698, -0.51185817,\n",
       "        -0.54093006, -0.46330871, -0.47795971, -0.46248352, -0.46295607,\n",
       "        -0.46247367, -0.46248403, -0.46247343, -0.46247812]),\n",
       " 'param_C': masked_array(data = [0.001 0.001 0.01 0.01 0.1 0.1 1 1 10 10 100 100 1000 1000],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False],\n",
       "        fill_value = ?),\n",
       " 'param_penalty': masked_array(data = ['l1' 'l2' 'l1' 'l2' 'l1' 'l2' 'l1' 'l2' 'l1' 'l2' 'l1' 'l2' 'l1' 'l2'],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'C': 0.001, 'penalty': 'l1'},\n",
       "  {'C': 0.001, 'penalty': 'l2'},\n",
       "  {'C': 0.01, 'penalty': 'l1'},\n",
       "  {'C': 0.01, 'penalty': 'l2'},\n",
       "  {'C': 0.1, 'penalty': 'l1'},\n",
       "  {'C': 0.1, 'penalty': 'l2'},\n",
       "  {'C': 1, 'penalty': 'l1'},\n",
       "  {'C': 1, 'penalty': 'l2'},\n",
       "  {'C': 10, 'penalty': 'l1'},\n",
       "  {'C': 10, 'penalty': 'l2'},\n",
       "  {'C': 100, 'penalty': 'l1'},\n",
       "  {'C': 100, 'penalty': 'l2'},\n",
       "  {'C': 1000, 'penalty': 'l1'},\n",
       "  {'C': 1000, 'penalty': 'l2'}],\n",
       " 'rank_test_score': array([14, 12, 13, 11,  9, 10,  7,  8,  4,  2,  6,  1,  5,  3]),\n",
       " 'split0_test_score': array([-0.63889538, -0.60613293, -0.60803432, -0.60850267, -0.54212519,\n",
       "        -0.57731541, -0.48755465, -0.50621855, -0.48691181, -0.48802354,\n",
       "        -0.48691616, -0.48698804, -0.4869391 , -0.48698067]),\n",
       " 'split0_train_score': array([-0.63547674, -0.57468819, -0.58030803, -0.56498015, -0.50930978,\n",
       "        -0.5355491 , -0.46012506, -0.47423223, -0.45929669, -0.45974019,\n",
       "        -0.45928545, -0.45929106, -0.45928549, -0.45929407]),\n",
       " 'split1_test_score': array([-0.64310809, -0.61611328, -0.61904532, -0.60802259, -0.55360886,\n",
       "        -0.57882142, -0.52747732, -0.52714048, -0.52858206, -0.52554609,\n",
       "        -0.52878954, -0.52800606, -0.52873536, -0.52839263]),\n",
       " 'split1_train_score': array([-0.63260949, -0.57414416, -0.58018997, -0.56601127, -0.49921277,\n",
       "        -0.53425838, -0.45208628, -0.46830467, -0.45122794, -0.45175369,\n",
       "        -0.45121813, -0.45124659, -0.45121835, -0.4512265 ]),\n",
       " 'split2_test_score': array([-0.64000748, -0.57520807, -0.58013726, -0.56344998, -0.50355695,\n",
       "        -0.53656855, -0.45965957, -0.4774384 , -0.45878554, -0.46015281,\n",
       "        -0.4587816 , -0.45887521, -0.45876765, -0.45877151]),\n",
       " 'split2_train_score': array([-0.64227136, -0.58449547, -0.59122923, -0.57634459, -0.51564552,\n",
       "        -0.54363274, -0.4669264 , -0.48068024, -0.46613429, -0.46655801,\n",
       "        -0.46612563, -0.46613116, -0.4661251 , -0.46612522]),\n",
       " 'split3_test_score': array([-0.6412635 , -0.5740564 , -0.57657426, -0.56760656, -0.49996176,\n",
       "        -0.53144555, -0.42814533, -0.45143155, -0.42394956, -0.42614786,\n",
       "        -0.4235797 , -0.42376475, -0.42351667, -0.4237598 ]),\n",
       " 'split3_train_score': array([-0.64292234, -0.58305365, -0.58887016, -0.57481075, -0.52197734,\n",
       "        -0.54712936, -0.47556666, -0.48895192, -0.47479713, -0.47521877,\n",
       "        -0.47478721, -0.4747925 , -0.47478675, -0.47478965]),\n",
       " 'split4_test_score': array([-0.64041159, -0.5703686 , -0.57776325, -0.56128741, -0.50340409,\n",
       "        -0.53317742, -0.47765505, -0.48231172, -0.48102434, -0.47897203,\n",
       "        -0.48142915, -0.48116907, -0.48150321, -0.48117349]),\n",
       " 'split4_train_score': array([-0.64073206, -0.58521303, -0.59232516, -0.57658814, -0.51314544,\n",
       "        -0.54408071, -0.46183914, -0.47762946, -0.46096155, -0.46150968,\n",
       "        -0.46095195, -0.46095884, -0.46095148, -0.46095514]),\n",
       " 'std_fit_time': array([  7.48391947e-04,   1.90734863e-07,   9.79812495e-04,\n",
       "          3.99994861e-04,   1.35659266e-03,   4.89901382e-04,\n",
       "          3.03318187e-03,   8.00025479e-04,   1.60014630e-03,\n",
       "          1.16625307e-03,   1.35648017e-03,   1.72034590e-03,\n",
       "          1.32680537e-03,   1.16622035e-03]),\n",
       " 'std_score_time': array([  8.00085075e-04,   1.16800773e-07,   4.00042545e-04,\n",
       "          1.90734863e-07,   9.79802753e-04,   3.99899493e-04,\n",
       "          1.16800773e-07,   4.89998722e-04,   9.53674316e-08,\n",
       "          4.00018706e-04,   4.00042545e-04,   4.89920847e-04,\n",
       "          9.53674316e-08,   4.89940316e-04]),\n",
       " 'std_test_score': array([ 0.00141084,  0.01891337,  0.01772297,  0.02173335,  0.02265833,\n",
       "         0.02179504,  0.03268671,  0.0258464 ,  0.03438701,  0.03268675,\n",
       "         0.03457519,  0.0342668 ,  0.03458283,  0.03439646]),\n",
       " 'std_train_score': array([ 0.00405323,  0.00487253,  0.0052922 ,  0.00515072,  0.00754717,\n",
       "         0.0050819 ,  0.00776638,  0.00686226,  0.00779889,  0.00776241,\n",
       "         0.00779907,  0.00779232,  0.00779883,  0.00779656])}"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看训练后的完整结果\n",
    "grid.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.475821286618\n",
      "{'C': 100, 'penalty': 'l2'}\n"
     ]
    }
   ],
   "source": [
    "#显示交叉试验后得到的最好模型\n",
    "print(-grid.best_score_)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    }
   ],
   "source": [
    "#将交叉试验后的结果与标准差进行赋值，为画图作准备\n",
    "test_means=grid.cv_results_['mean_test_score']\n",
    "test_stds=grid.cv_results_['std_test_score']\n",
    "train_means=grid.cv_results_['mean_train_score']\n",
    "train_stds=grid.cv_results_['std_train_score']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#交叉试验后的结果图形化作数据处理\n",
    "n_Cs=len(Cs)\n",
    "n_penaltys=len(penaltys)\n",
    "test_scores=np.array(test_means).reshape(n_Cs,-1)\n",
    "test_stds=np.array(test_stds).reshape(n_Cs,-1)\n",
    "train_scores=np.array(train_means).reshape(n_Cs,-1)\n",
    "train_stds=np.array(train_stds).reshape(n_Cs,-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZoAAAEKCAYAAAArYJMgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3XlcVFX/wPHPYd9xQUFFREVzXwEr\n19RKsyeXUrPMMnvct8ySnsrKfEqzNCv7mUsupamVW4v2lLib4b5rboggoODCzjAz5/fHHRCdQQZh\nHMDzfr1o7tx77plzDPhy7j33e4SUEkVRFEWxFQd7N0BRFEUp31SgURRFUWxKBRpFURTFplSgURRF\nUWxKBRpFURTFplSgURRFUWxKBRpFURTFplSgURRFUWxKBRpFURTFppzs3YDSwM/PTwYHB9u7GYqi\nKGXKvn37kqSUVQorpwINEBwczN69e+3dDEVRlDJFCHHBmnLq0pmiKIpiUyrQKIqiKDalAo2iKIpi\nU+oeTQFycnKIjY0lKyvL3k0pVdzc3AgMDMTZ2dneTVEUpYxQgaYAsbGxeHt7ExwcjBDC3s0pFaSU\nJCcnExsbS+3ate3dHEVRygh16awAWVlZVK5cWQWZfIQQVK5cWY3yFEUpEhVo7kAFGXPq30RRlKJS\ngaYE9f/6L/p//Ze9m6EoilKqqEBTinl5eeVtd+vWjQoVKvDkk0/m7evduzctWrQgJCQEX19fWrRo\nQYsWLdi1a1eRPicyMpLdu3eXWLsV5Xbl6Y+wNoueps2ip+3djBJxr/qiJgOUEa+//joZGRl8/fXX\nefvWrFkDwJYtW/jkk0/45Zdf7qruyMhI/Pz8ePDBB0ukrYqiKPmpEU0Z0aVLF7y9va0uv2fPHjp2\n7Ejr1q3p3r07iYmJAMyaNYtGjRrRvHlzBg4cyNmzZ1mwYAEzZsy4q9GQYlvlZSQQ7fIJ0S6f2LsZ\nip2oEY0V3v/5GMcvpRRa7ni8VsaaXwyNqvvw7r8aF7ttlmRnZzNu3DjWr1+Pn58fy5Yt45133mHe\nvHl8/PHHXLhwARcXF65fv06FChV45ZVX8PPzY/z48TZpj6Io9zcVaMqhEydOcOzYMbp27QqAwWAg\nMDAQgMaNGzNw4EB69uxJr1697NlMRVHuE3YLNEKISsBKIBiIBvpJKa8VUNYHOAGskVKONu3bAlQD\nMk3FHpNSXhZCuAJLgdZAMtBfShldnLZaO/LIHcmsHPZQcT6u2KSUNGvWjO3bt5sd+/3339m6dSvr\n1q1j6tSpHD161A4tVBTlfmLPezQRwCYpZT1gk+l9QT4AtlrY/7yUsoXp67Jp3xDgmpQyBJgFTC/J\nRpcFjRo1Ii4ujqioKAB0Oh3Hjh3DYDAQGxtL586dmTFjBleuXCEjIwNvb29SU1Pt3GpFUcorewaa\nnsAS0/YSwOJ1HCFEa8Af+N9d1Psj0EWUg6cM27dvT9++fdm0aROBgYH8/vvvBZZ1dXXlxx9/ZMKE\nCTRv3pyWLVvy999/o9free6552jWrBmtWrVi0qRJeHt707NnT1atWkXLli3VZABFUUqcPe/R+Esp\n4wGklPFCiKq3FxBCOACfAi8AXSzUsUgIYQB+AqZKKSVQA7hoqlcvhLgBVAaSbNMN20lLS8vbtnQZ\nLFenTp3o1KnTLftatWrFjh07zMru3LnTbF+DBg04cuTI3TdUURTlDmwaaIQQfwIBFg69ZWUVI4Hf\npJQXLQxKnpdSxgkhvNECzQto92YsjV6khbYNBYYCBAUFWdmcO7P3vRlFUZTSyKaBRkrZtaBjQohE\nIUQ102imGnDZQrGHgPZCiJGAF+AihEiTUkZIKeNMn5EqhFgOhKMFmligJhArhHACfIGrFto2D5gH\nEBoaahaIFEVRlJJhz3s064EXTdsvAutuLyClfF5KGSSlDAYmAkullBFCCCchhB+AEMIZeBLInT6V\nv95ngEjTJTVFURTFDuwZaKYBjwohTgOPmt4jhAgVQiwo5FxX4HchxGHgIBAHzDcdWwhUFkKcASZw\n59lsiqIoio3ZbTKAlDIZCzf4pZR7gVcs7F8MLDZtp6M9J2Op3iygbwk2VVGUYqqVc9beTSgx7y47\noW0Mtm87SsK96ovKDFCSFvXQXgf/at92KOXG5OTXTVvmMwjLkpdW6bSNofZth2IfKqlmKXYvlgmY\nM2cOy5YtK9F2K4qi5KdGNGVEcZYJ0Ov1ODlZ/l89atSokm+soihKPmpEU0YUdZmAwMBAPvjgA9q2\nbcuaNWuYO3cuYWFhNG/enL59+5KZqaWIe/vtt/nss88AaNeuHREREYSHh/PAAw+oLAGKopQINaKx\nxoYISLDiyfmEw9pr7r2aOwloCt2nFa9dhfD09MzLBJCcnMzw4cMBiIiIYPHixYwYMcLsHCklUVFR\nrF+/nilTprBx40abtlFRlPJPBZpyrH///nnbhw8fZvLkyVy/fp3U1NRb7vXk16dPHwBat25NdHT0\nvWimoijlnAo01rB25FHKZp15enrmbQ8aNIgNGzbQpEkTFixYwO7duy2e4+rqCoCjoyN6vf6etFOx\nktEIRv1tX4YC3ucUcPy2fYacO9SR/33OHY7n22ew/Llh9ZLRpziR8kY7kBKk9oKUpldM+0zHjKZ9\nyJvb+Y7nPy+3nrxto+k807Y01ZO3fcvnW6jLqD3fnVeXlFpTTOfXz9CBhOhHmt2T/+22VD9TR7av\n0eafowLNfSI9PZ2AgABycnJYvnw5derUsXeTlMJE76C+7iSO6OH9iqbfvnYkHMHRGRycwMHR9Opk\n4b0zEgcyEyVp0Tmknc8i+3IlAK7vS7ZBu7QvIcSt2w4gBNp/LB0XIBzM95ltOzjkldXqk+AADm4u\nJd8XS32zJV069+K7SgWaMqJ9+/acPHmStLQ0AgMDWbhwIY8//rjV50+ZMoXw8HCCgoJo0qQJWVlZ\nNmytUmz//A6rBnHZCaLcfOjdaqjFX+jmv/AtBAHHQo5b/LIQSApZbUN/9SrpO3aQtnUbaTt2YLxx\nAxwd8WjViqvZe8hygbYL1oIQ2i9vB0ftF73ZtoPp+M3XAreF4F6vAvJb10YAPLFh7z39XFv4rWsj\nMEBTG3+OUGnAtKSae/fe+k1z4sQJGjZsWLSKStmlM1u5q38bxXpHfoQ1w8C/MUOM10h1dGTV0IP2\nbpUZaTSSdfwEadu2krZ1K1mHj4CUOFaujFeHDnh17IDnww/j6ONz85fzn8ft3OriU325SQixT0oZ\nWlg5NaIpSeU8wCj3wN5F8MurEPQQPLeC1KUd7d2iWxhSU0nfuYu0rVtJ274dQ1ISCIFbs6b4jR6F\nV4eOuDVupI04FMVEBRpFKS12fg5/vAMhj0K/peDiYe8WIaVEd+YMadu2kbZlKxkHDoBej4OPD17t\n2mmjlnbtcKpc2d5NVUoxFWgUxd6khMipsP0TaNwbes8Dp3two7kAxowM0v/+Wxu1bNuG/lI8AK4N\nGlD55Zfx6tgB9+bNEQVkm1CU26nvFEWxJ6MRNk6CqHnQahA8+Zl24/0e08XEaDfxt24lIyoKqdMh\nPDzwfPghvIYPx6tDB5wDLC2WqyiFU4FGUezFoId1o+DwCnhoNDw2tdCZXSXFqNORuXevNmrZug2d\n6eFcl9q1qThggDZqCQ3FwcV+Iyul/FCBpgQN3qgt6rCo2yI7t0Qp9XKy4KchcPIXeORt6DDRYpAZ\n8INpdFMC6fVzEhK0Ucu2baT/9RcyIwPh4oJHmzZUfP55vDp2wCUoqPgfZMH7z2uzFJ+wSe33lupL\n0dkl0AghKgErgWAgGugnpbxWQFkf4ASwRko5WgjhDWzPVyQQ+E5KOV4I8RIwA23FTYAvpZSFrdZZ\nanl5eZGWlsbBgwcZMWIEKSkpODo68tZbb9G/f3969+7N+fPnSUtL48qVK9SuXRuAr776iocfftjq\nz4mMjMTDw4MHH3zQVl1R8stOgxXPwfmt0P1jaDPMJh8j9XoyDx0ibYt2ryX71CkAnKpXw7fnU3h1\n6IDngw/i4O5uk89XlFz2GtFEAJuklNOEEBGm95MKKPsBsDX3jZQyFWiR+14IsQ9Yna/8Sinl6JJv\nsv14eHiwdOlS6tWrx6VLl2jdujWPP/641csEFCYyMhI/Pz8VaO6FzGuwrC/E7YNec6HFgBKtXn/1\nqjZi2baNtB07MaakgJMTHq1aUfX1iXh17IhL3br3/CFH5f5mr0DTE+hk2l4CbMFCoBFCtAb8gY2A\n2UNBQoh6QFVuHeGUO/Xr18/brl69OlWrVuXKlStUqFChwHP27NnDxIkTSUtLo2rVqixevBh/f39m\nzZrF/PnzcXZ2pmnTprz//vssWLAAR0dHFi9eXOTRkFIEqYnwXR9I+kebvtzwX8WuUhqNZB07lndJ\nLOuI6aFJPz+8u3bVRi1tH8axCEtMKEpJs1eg8ZdSxgNIKeOFEFVvLyCEcAA+BV4AuhRQzwC0EUz+\n9AZPCyE6AP8Ar0opL1o6UQgxFNOV76BCrktPj5rOyasn79wjyCuTe6/mThpUasCk8IIGcQWLiopC\np9NRt27dAstkZ2czbtw41q9fj5+fH8uWLeOdd95h3rx5fPzxx1y4cAEXFxeuX79OhQoVeOWVV/Dz\n82P8+PFFbo9ipesxsLQnpCbAcyuhbudCT5FScsq7LulO7jgcjDPlgpSItDQ8Du/D6+DfeB3ag3PK\ndaQQZNRpwI3eA7neLJyMmnWQDg5ICcbDSUiZhFHeTBZpNCWKzN3O/TyjJO9zjKYCRtN7ray2TW4d\nphyXedu31auXOVzTnyE1zQPhfI2u31n42bBycGVdsYIynZifbfWY7raCaboMAB5bPjhfkcJqExa2\nCtpTQmXNRq3mZdOycnDEE1uzWaARQvwJWJoP+ZaVVYwEfpNSXrzDMP9ZtECU62fgeyllthBiONpo\nyeJPtJRyHjAPtBQ0VrbJruLj43nhhRdYsmQJDnd48vrEiRMcO3aMrl27AmAwGAgMDASgcePGDBw4\nkJ49e9KrV6970u77XtJpLcjo0uCFtRDUptBTdHojEasPs7r+iyAl2+ZtIDzhBGGJJ2l0NRpHaSTV\n2Z0d/g3YU68h+6o+QIqrp5Zt+GA2HDxRYs13MCWZ1PJPaskmc7eFAAdh+jUrQAgjwi0G3M4i3c4g\nXaLBIQcHb5A5lbmclXNr5cX6ybMuqJT0D7c0paGMT7tk+RPMfl3JArYt135Xx8Rd1utkxKCz/WjX\nZoFGStm1oGNCiEQhRDXTaKYacNlCsYeA9kKIkYAX4CKESJNSRpjqaA44SSn35fvM/Klh5wPTS6Iv\n1o48bDnrLCUlhR49ejB16tRC76VIKWnWrBnbt5tfUfz999/ZunUr69atY+rUqRw9erTE26rkE38I\nvu2j/XX50q/agneFuJ6hY/h3+zjwTwIf7plHw+SLuOkNAIh69XHs8SJOD7fHs1FjnnJ2oqfpF72D\nEOQlHRa3BgEhbu67tazp9ZayIi+4FEZv1HMi+QRRCVHsSdjD/sv7ydRrq7fWr1if8ID+hAWEEbHp\nc4STI38P/umu/ylLizaLngYoP31xsn2CXXtdOlsPvAhMM72uu72AlPL53G3TbLLQ3CBjMgD4Pv85\nucHL9PYptNlqZZ5Op6N3794MGjSIvn37Flq+UaNGxMXFERUVRXh4ODqdjtOnT9OgQQNiY2Pp3Lkz\n7dq1Y9myZWRkZODt7U1qauo96Ml9JmY3LOsHrt4waB34hRR6yoXkdAYv3kNscgbfXv0D78Ro0twd\nCX53ivbQpL//PWh4wQxGA6eunWJPwh6iEqLYn7iftJw0AOr61qVn3Z6EVwsn1D+Uim4V884TzLFX\nk5VSwF6BZhqwSggxBIgB+gIIIUKB4VLKV6yoox/m07/HCiGeAvTAVeClEmuxHa1atYpt27aRnJzM\n4sWLAVi8eDEtWrSwWN7V1ZUff/yRsWPHkpqail6v57XXXiMkJITnnnuO1NRUjEYjkyZNwtvbm549\ne9K3b19Wr17NnDlz1GSAknDmT1gxEHxraJfLKtQs9JS90VcZ+u0+pJSs8vkH19WbuezrzFUfZ8Kt\n+APDFozSyOlrp/MCy77EfaToUgAI9gmme+3uhAeEExoQip+7n13aqJR+dgk0pktcZjf4pZR7AbMg\nI6VcDCy+bZ/Zyl1SyjeBN0uqnfaWlqb9pThw4EAGDhxYYLlOnTrRqVOnW/a1atWKHTt2mJXduXOn\n2b4GDRpw5MiR4jVWuen4OvhxCFRpAC+sBi+zuS5m1h+6xMQfDlGjgjvzQzLIeXMePk8+ycmDm+5B\ng2+SUnLuxrm8S2F7E/ZyLVt7xC3QK5CutboSFhBGmH8Y/p72HV0pZYfKDFCCVEYAhQPfwfoxEBgG\nz60C94KnoIP2i33O5jN88r9/CA+uxJcP+XBt8CDcGjem2tQP4F+RNm2ulJILKRfyAsuehD0kZ2m3\nOgM8A2gf2J7wgHDCAsKo7lXdpm1Ryi8VaBSlpOz+P9gYAXUegWeXgcudp43q9Eb+s+YIP+6LpVeL\n6nzYNYhLzz6L8PQgcM6XOLi52aSZsamxeZfCohKiuJyhzcWp4l6FNtXaEB4QTnhAOIHegerBTqVE\nqECjKMUlJWydDls+0h7CfHohOLne8ZQbGTkM/24ff51LZlyXeozrGMzFfw9Ff/kytb5dWqI3/RPS\nE7SgEq+NWi6la9NyK7lVIiwgLG/EEuwTrAKLYhMq0ChKcUgJv78Fu+dAi+fhX5+D451/rGKSMxi8\nOIqYqxnM7NecPq0CSZgyhYy//6batI9wb968WE26knEl71JYVEIUF1O1Z5Z9XX0J8w/jxcYvEh4Q\nTt0KKhWNcm+oQKMod8togJ/Havdl2gyHxz+CQpYw3h9zjX8v2YveKPl2SBserFOZaytWcG3591R6\n+WUq3PYQ7bTnggHofYc6kzOT2ZO4hz3xWmCJTokGwNvZm9YBrRnQYADhAeHUq1gPB6GWWFbuPRVo\nStCFFwYBUOvbpXZuiWJz+mxY/W9thlnHSdDpzULXkvn1cDwTVh2kmq8b37wURp0qXqRHRZEw9b94\ndmhP1dcmWPXR17Ouszdxb96o5cz1MwB4OHnQ2r81T9d7mrBqYTSo2ABHOyyipii3U4GmFLsXywTM\nmTOHChUq8PzzzxdeWNHoMmDlQDi7CR77Lzx852ThUkr+b+tZPt54itBaFZk3KJRKni7oYmOJGzsO\nl5o1qfHppwhHy0FBYmBzzOa8wPLPtX+QSNyd3GlRpQU96vQgPCCcRpUb4eSgfqSV0kd9V5YBxV0m\nQK/X41TA+u6jRo2yWbvLpawbsLw/XPwbnvpCW375DnIMRt5ec5SVey/yVPPqfPxMM9ycHTGmpxM7\nchTSaCTwqzkWsytfzrhMlriIkUzGbh6Li4MLLaq2YGSLkYQHhNPUrynOjs626qmilBgVaMqAu1km\nIDAwkGHDhrFx40bGjx9PcnIyCxcuRKfTUb9+fZYuXYq7uztvv/12Xubmdu3a0a5dOyIjI7lx4waL\nFi1SWQLyS7uipfm/fAKe+QYa3+nOCdzIzGHksn3sPJPM2M4hvPpofYQQSKORuEmTyD5zhprz5uFq\nGonml6XPYlzkOIxk4UQl5j3+Cc2qNMPV8c6z2RSlNFKBxgoJH35I9onClwnIOqmVyb1XcyeuDRsQ\n8J//FLkt1iwTkMvT0zMvE0BycjLDhw8HICIigsWLFzNixAizc6SUREVFsX79eqZMmcLGjRuL3MZy\n6UacloH5RiwM+B7qPXrH4hevZvDy4j1EJ6fzSd/mPNM6MO9Y0pdfkvbnJvzfjMCrXVuzc6WUTN41\nmWPJx3CR1XDCi7CAsBLvkqLcK2oKShmSu0zAokWL7rhMQK7+/fvnbR8+fJj27dvTtGlTVqxYwbFj\nxyye06dPHwBat25NdHR0ibS7zEs+C990g7RELaVMIUHm4MXr9P5qJ4kpWSx5OfyWIJOyYQNJX/0f\nvk/3oeIgy3+QLDiygA3nNzC21Vic8CrRriiKPagRjRWsHXnYctZZUZYJyOXpefPJ9EGDBrFhwwaa\nNGnCggUL2L17t8VzXF21SzOOjo7o9friN7ysSzgK3/YGaYAXf4bqlhOZ5tpwJJ7xKw9S1ceVFUMf\nIqTqzUCRdfw4l978D+4tWxLw7rsWn2GJjInk8wOf80TtJxjSZAjz924o8S4pyr2mRjRlQFGXCbAk\nPT2dgIAAcnJyWL58eQm3sJy6uAcWPwEOTjB4wx2DjJSSr7eeZcSy/TSu7sPakW1vCTL6pCQujhqN\nY4UKBH7xOQ4uLmZ1nLp6iojtETSp3IT3H35fPUyplBtqRFMGFHWZAEumTJlCeHg4QUFBNGnShKws\n2y92VKad2wLfP6dlXh60DirWKrBojsHI5HXH+D4qhh7NqvFp3+a4Od+cqmzU6YgdMxbDtWsEL1+G\nk595Ov3kzGTGRo7F29mb2Z1n4+ZkmzxnimIPKtCUYsVZJiA2NvaW96NHj2b0aPPnPaZOnZq3nX9Z\ngYCAAM6cOXM3zS77Tv4KP7wElUPghTXgbWlFck1KVg6jlu1n++kkRj1Sl9cefQAHh5sjESklCe+9\nT+aBA9T4bBZujRqZ1ZFjyGHClgkkZyWzpNsSqnoUvqyAopQldgs0QohKwEogGIgG+kkpr1koZwBy\nF0uJkVI+ZdpfG1gBVAL2Ay9IKXVCCFdgKdAaSAb6SymjbdoZE5URoBw4tALWjtQukz3/I3hUKrBo\n7DVtZtm5K+l8/HQz+oWZL2527dtvubF6NX4jR+DTrZvZcSklH+z+gP2X9zOjwwwa+zUu0e4oSmlg\nz3s0EcAmKWU9YJPpvSWZUsoWpq+n8u2fDswynX8NGGLaPwS4JqUMAWaZyilK4aLmw5phENxWu1x2\nhyBz6OJ1es3ZRfwNbWaZpSCTtmMnidOm49W1C34WRpMA3534jjVn1jC02VC61TYPRIpSHtgz0PQE\nlpi2lwC97lD2FkK7S9oZ+NHC+fnr/RHoIu7yrqqU8m5OK9fKwr9J/6//ov/Xf1l/gpSw/VP4bSI8\n8AQ89wO4mj+pn2vj0QT6z/sLN2cHVo94mLYh5vdcss+fJ27CBFxDQqgxfTrCwnT0nXE7+WTvJ3QJ\n6sKoFipDg1J+2TPQ+Esp4wFMrwVdmHYTQuwVQuwWQuQGk8rAdSll7vzbWKCGabsGcNFUrx64YSpf\nJG5ubiQnJ5eJX6z3ipSS5ORk3Gy0IJddSAl/vgubpkDTftBvKThb7p+UkvnbzjFi2T4aBPiwZmRb\n6vmbByRDaiqxI0chHB0J/GoODp7mC6Cdu3GO17e+TkiFED5s96HKqqyUaza9RyOE+BOwdCf1rSJU\nEySlvCSEqANECiGOACkWyuVGBEujF7NoIYQYCgwFCAoKMjshMDCQ2NhYrly5UoSmln9ubm4EBgYW\nXrAsMBrg1wmwbzGEDoEnPikwzb/eYOTd9cdY9ncMTzQNYGa/FrfMLMslDQbiXnsN3cWLBH2zEBcL\n/1Y3sm8wNnIszo7OfNH5CzycPUq6Z4pSqtg00EgpuxZ0TAiRKISoJqWMF0JUAy4XUMcl0+s5IcQW\noCXwE1BBCOFkGrUEApdMp8QCNYFYIYQT4AtctVDvPGAeQGhoqFkgcnZ2zsuGrJRDhhztfszRn6Dd\nBOgyucA0/6lZOYxefoCt/1xheMe6vPH4rTPL8rs8cybp27YT8N57eIaHmx3XG/VM3DqRuLQ4vnn8\nG6p7VS/RbilKaWTP8fp64EXT9ovAutsLCCEqmmaRIYTwA9oCx6V2PWsz8IyF8/PX+wwQKdX1LyW/\nnExY8bwWZLq+B13fLTDIXLqeSd+5f7HjTBIf9WlKRPcGBQaZ62vXcnXhN1R8bgAVn+1vscyMPTPY\nHb+byQ9OpmXVliXUIUUp3ez5HM00YJUQYggQA/QFEEKEAsOllK8ADYGvhRBGtKA4TUp53HT+JGCF\nEGIqcABYaNq/EPhWCHEGbSTz7L3qkFIGZKXA9wPgwk7oMRPChhRY9EjsDYYs2UOmzsDiwWG0r1el\nwLKZBw+S8M5kPMLD8X/zTYtlfvjnB5afXM6gRoPoXe/OmZ8VpTyxW6CRUiYDXSzs3wu8YtreBTQt\n4PxzgNm1CSllFqagpdyfJie/btraceuBjKtamv/4w9BnPjQr+Nvkj+OJjP3+AJU8Xfh2RBseCCh4\nFlpOYiIXx4zByd+fGrM/QzibrxGzJ2EPH+7+kLY12jKhtXUraSpKeaEyAyj3h5R4+LYXXD0Pzy6D\nB7pbLCalZNHOaD749TjNavgy/8VQqnoXPMvOmJVF7KjRyPQMAhcuxKliRbMyF1MvMmHLBGr61GRG\nhxlqeWXlvqMCjVL+XT2vrSWTkQwDf4La7S0W0xuMTPnlOEv/usDjjf35rH9L3F0KDgpSSuLfepus\nY8cInPMlbvkWqMuVpktjbORYjNLIF52/wNul4JGRopRXKtAo5dvlE7C0FxiyYdB6CGxtsVhatp4x\ny/ez+dQVhnaoQ0S3gm/650qev4CUX3+lyvjxeHfubHbcYDQQsT2C8zfOM/fRudTyKTgxp6KUZyrQ\nKOVX3D747mlwdIWXfgN/84SWAPE3Mnl58V7+SUxlaq8mDHyw8ICQGrmZK7Nm4fPEE1QeNtRimc8P\nfM7W2K38p81/eLCadWsI3a5RNZ+7Oq+0CdZNtHcTFDtSgUYplzyMabCkp5avbNBaqFTHYrmjcdrM\nsvRsA9+8FEbH+gXPLMuVffo0lyZOxK1RI6r9d6rFdWN+Pvsz3xz9hn71+/HsA2rio3J/U4FGKXe8\njCnU1MeAX30tyPhYfihy04lExnx/gAruzvw44iEaBBQ+etBfu8bFkaMQHh4EzvkSB3d3szKHrhzi\nvV3vERYQRkSbCLWAGbBy2EP2bkKJ+XvwT/ZuQom5V31RgUYpX5LOUFMfQ7ZwxX3wBvC0nOZu8c7z\nTPnlOI2r+7LwxVCq+hSev03m5BD36gT0CQkELV2Cc4B5dqWE9ATGRY6jqkdVZnacibOD+VRnRbnf\nqECjlB8GPawZihEHYpyCecBCkDEYJR/8cpzFu6J5tJE/s59tgYeLdT8GidOmk7F7N9U++giPluZP\n9WfqMxkbOZYsQxYLHltABbdqUYZiAAAgAElEQVQKxe6SopQHKtAo5ceOmRC3j3jHmuiF+UgiPVvP\n2O8PsOnkZYa0q81/nmiIYyEzy3JdW7mKa8uWUemll6jQ23xFCyklb+94m5NXT/Jlly8JqRhS7O4o\nSnmhAo1SPsTth63TockzpPxzyuxwwo0shizZw4n4FKb0bMygh4Ktrjpjzx4SPvgAz/btqfq65dlT\ncw/P5X8X/seE1hPoENjhbnthZlG3RSVWl6LYi1VJNYUQbYUQnqbtgUKImUII9VCAUjrkZGqZmD2r\nQo9PzA4fv5RCrzk7iU5KZ+GLYUUKMrrYOGLHjsMlMJAan36CcDR/gPOPC3/w1cGveKruU7zU+KVi\ndERRyidrszf/H5AhhGgOvAFcAJbarFWKUhR/vgdJ/0CvOeB+awqYzScv03fuLgB+GP4wjzQoaH09\nc8b0dGJHjULq9QR+9RWOPuaz0k4kn+CtHW/RrEozJj80Wc0wUxQLrA00elOq/Z7AbCnlbEDl0lDs\n7+xm+HsuhA+Durc+nf/tX9EMWbKHYD9P1o5qS6Pq1j/8KI1GLkVEkH36NDVmzsS1jvnaREmZSYzd\nPBYfFx9mPzIbV0fX4vZGUcola+/RpAoh3gQGAh2EEI6Amrep2FfmdVg3CirX09aVMTFIwTfZnVm7\n7hhdGlTl8wEt8XQt2u3IpDlfkfrHn1SNmIRX+3Zmx3UGHeM3j+dG9g2WdFuCn7tfMTujKOWXtT99\n/YHngCFSygQhRBAww3bNUhQr/PY6pCbAK3+Ai7YcspSSl4yTuarT8dLDwbzzZCOrZ5blStn4O0lz\n5uDbuzeVXnzR7LiUkvf/ep9DVw7xacdPaVi5YYl0R1HKK6tHNGiXzAxCiPpAA+B72zVLUQpxbA0c\nWQWd3oQaNxNlLt4VzdV0HYEV3XnvqcZFrjbrxAkuvfkm7i1aEPD+exbvuSw9vpT1Z9czsvlIHgt+\nrFjdUJT7gbX3aLYBrkKIGsAmYDCw+G4/VAhRSQjxhxDitOnVfBEPrZxBCHHQ9LU+3/5lQohTQoij\nQohvhNAemhBCdBJC3Mh3zuS7baNSiqXEwy+vQvVW0P61vN3HL6Xw0W8nqeDuTHXfwp/0v50+KYmL\nI0fh6OtL4Bef4+DiYlZmW+w2Pt37KY/VeoxhzYcVqxuKcr+wNtAIKWUG0Af4QkrZGyj6n4s3RQCb\npJT10AJXRAHlMqWULUxfT+XbvwxtVNUUcMe0IqfJ9nznTClGG5XSSErtvkxOFvSZB47arcJMnYGx\nKw5QwcOZOlU8izz7S+p0xI4dh+HaNQK//BKnKubJNc9eP8sb296gQaUGTG03FQdh7Y+PotzfrA40\nQoiHgOeBX037irNMYE9giWl7CWD+qPUdSCl/kyZAFBBYjLYoZcnehXB2Ezz2AfjVy9s99dfjnLmc\nxsx+LXB2LFoAkFISP2UKmfv3U/3D/+LexPxvqOtZ1xkTOQY3Rzc+7/w57k7myTQVRbHM2p/I8cCb\nwBop5TEhRB1gczE+119KGQ9gei3o4QY3IcReIcRuIYRZMDJdMnsB2Jhv90NCiENCiA1CiAJHXUKI\noaa69165cqUYXVHumeSz8L93tGnMYTcHsRuPJrDs7xiGdahDu3pFn/117dvvuPHjT1QePgyfJ54w\nO55jzOG1ra+RmJ7I7M6zCfA0T6apKErBrJoMIKXcCmwVQngLIbyklOeAsXc6RwjxJ2DpJ/KtIrQv\nSEp5yRTYIoUQR6SUZ/Md/wrYJqXcbnq/H6glpUwTQjwBrAXqYYGUch4wDyA0NFQWoU2KPRj0sHoo\nOLpAzzlgujQWfyOTiNWHaVrDl9cee6DI1abt3EnitGl4delClbGWv6WnR00nKiGKD9t9SPMqzYvV\nDUW5H1kVaIQQTdEyAVTS3oorwCAp5bGCzpFSdr1DfYlCiGpSynghRDXgcgF1XDK9nhNCbAFaAmdN\ndbwLVAGG5Sufkm/7NyHEV0IIPyllkjX9VEqxHbMgbi88vTBvfRmDUfLqyoPo9EY+H9ASF6eiXTLT\nRUcTN+E1XOvWofr06QgH8/NXnFzBylMrGdxkMP+q+68S6Yqi3G+s/cn8GpggpawlpQwCXgPmF+Nz\n1wO5Dyi8CKy7vYAQoqIQwtW07Qe0BY6b3r8CPA4MkFIa850TIEx3gYUQ4Wj9Sy5GO5XS4NIB2DoN\nmjwNTZ/J2z1361l2n7vK+081prafZ5GqNKSmcnHUaIQQWnoZL/Pz/47/m2lR0+gY2JFxLccVuxuK\ncr+y9jkaTyll3j0ZKeWW3CSbd2kasEoIMQSIAfoCCCFCgeFSyleAhsDXQggjWsCYJqU8bjp/Llq+\ntb9McWW1aYbZM8AIIYQeyASeNU0YUMqqnExYPQw8q8ATNxNmHoi5xsw//uHJZtV4pnXR5oJIg4G4\niRPRXbhA0MKFuNSsaVYmJiWGCVsmUNu3NtPaT8PRoThzXxTl/mZtoDknhHgH+Nb0fiBw/m4/VEqZ\nDHSxsH8vpqnKUspdaNOXLZ1vsd1Syi+BL++2XUop9Of7kHQKBq4Gj0oApGblMG7FQQJ83Phv76Zm\nU5mjXXIDkuVlaq/MmkX61m0EvDsZzzbhZsdTdamMiRyDg3Dg886f4+XiVaJdUpT7jbWXzl5Gux+y\nGlhj2h5sq0YpCgDntsDf/wfhQyHk5t8lk9cdI/ZaBrOfbYGve9FS7t1Yv57kBQup8Gx/Kg4YYHbc\nYDTwxrY3iEmJYWanmdT0Nh/tKIpSNNbOOrtGIbPMFKVEZV6HtSNNCTPfz9u95kAsaw7E8WrX+oQG\nVypalYcPE//2O3iEhRHwluXJj7P2zWJH3A7eefAdwgLCitUFRVE0dww0QoifgQLvcdz2tL6ilJwN\nb5glzIxJzuCdtccIC67IqEfqFqm6nMTLxI4ajVOVKtT4fDbC2XwktPbMWpYcX8KABgPo90C/EumG\noiiFj2jMlytUFFs7thYOr4SOEXkJM3MMRsauOIAQ8NmzLXEqwtP/xqwsYkePxpCeTvCCBThVNE+t\nd+DyAab8NYU21drwRtgbJdYVRVEKCTSmBzUV5d5JTYBfxkP1ltBhYt7uz/78h4MXrzPnuVbUqGB9\n+hcpJfHvTCbryBECv/wCtwfqm5WJT4tn/ObxVPOsxqcdP8XJoWhr1yiKcmfWPrB5BPNLaDeAvcBU\n0ywyRSkeKWHdaG1Kc++bCTP/OpvMV1vO0j+0Jj2aVSu0mojl0drGYLi6cCEpP/9MlXFj8e5q/gxx\nRk4GYyLHkGPI4YtuX+Dr6luSPVIUBeunN28ADMBy0/tnAYEWbBYD6pFppfj2LYIzf0D3j6GKNvK4\nlq7j1ZUHqV3Zk3efalSk6lK3bOHypzPx7t6NysOHmx03SiNv7XiL09dPM6fLHOr41imRbiiKcitr\nA01bKWXbfO+PCCF2SinbCiEG2qJhyn0m+Sz8/hbUeQTC/g1ol70iVh8mOT2bBS+2xcPF+ktaLjlG\nLr02EdeGDaj+4YcWlw34v0P/x58xf/J66Ou0q2G+XLOiKCXD2juqXkKINrlvTOldcp9i05d4q5T7\ni0EPa4Zpl8p6fQWmnGPLo2L4/VgibzzegCY1rL+k5WCQBCZlI9zcqDlnDg7u5vd0Np7fyNxDc+kd\n0psXGr1QYl1RFMWctX8ivgJ8I4TwQrtklgIMMaWh+chWjVPuEztnQeyeWxJmnk5M5YNfjtO+nh9D\n2tW2uqrsc+epmZSNs14S+MUXOFczv6dzLPkYb+98m5ZVW/L2g28XeZE0RVGKxtoHNvcATYUQvmir\nbV7Pd3iVTVqm3B8uHYQt06Bxn7yEmVk5BsZ8fwBPFyc+7dccB4fCA4ExPZ2kuXNJXrwEF72RS5Vd\naNSqpVm5KxlXGBs5lkpulZjVaRYujubLNSuKUrKsnXXmC7wLdDC93wpMkVLesGHblPIuJ0u7ZOZZ\nBXp8mrd7+saTnExIZdFLYVT1drtjFVJKUjdsIHH6x+gTE/Ht1Yu9Ub9jcDQPTln6LMZtHkeqLpVv\nu39LZffKJd4lRVHMWXuP5hsgFehn+koBFtmqUcp9YtMUuHISen6ZlzBz88nLLNoZzUsPB/NIg4IW\nXtVknz5NzEuDiZvwGo6VK1Fr+XKqT/sIV3cnPFxuzbYspeS9v97jSNIRPmr3EQ9UKvoiaYqi3B1r\n79HUlVI+ne/9+0KIg7ZokHKfOLcVds/RlmQO0Z5vuZyaxcQfDtEgwJuI7g0KPNWQlkbSl3O4+t13\nOHh44D/5HSr2749wLDiV/zdHv+HXc78ypuUYutQySxyuKIoNWRtoMoUQ7aSUOwCEEG3R1ntRlKLL\nS5gZAo9OAcBolLy26hDpOj0rBjyIm7N50JBSkvLzzyTOmIEhKZkKzzxDlVfH41Tpzsk1N8dsZvb+\n2XQP7s6/m/7bJl1SFKVg1gaaEcCS3MkAwFXgpbv9UCFEJWAlEAxEA/1MGaJvL2cAjpjexuQm8RRC\nLAY6oj0wCvCSlPKgaXXN2cATQIZp//67badiIxsmQWo8DPkDXLT1877ZeZ7tp5P4b+8m1PP3Njsl\n6+RJEj6YSua+fbg1bUrNOXNwb9bMYvUrxjQGtCVY/7n2DxHbI2hUuRFT2k5RM8wUxQ6snXV2EGgu\nhPAxvU8p5udGAJuklNOEEBGm95MslMuUUrYooI7XpZQ/3ravO1DP9NUG+D/Tq1JaHF8Hh1dAx0kQ\nqCXMPBp3g+kbT/JYI3+eCw+6pbghJYUrn3/BteXLcfTxIeCDKVR4+mmEQ+G3F69mXWVs5Fg8nT2Z\n/chs3JzuPLFAURTbKGyZgAkF7AdASjnzLj+3J9DJtL0E2ILlQHM39S41Ld+8WwhRQQhRTUoZXwJ1\nK8WVmgA/5ybMfB2ADJ2esd8foLKnK9Ofbnbze8to5MaatVz+9FMM169T8dn+VBk7FscKFaz6KKM0\nMmHLBJIyk1j0+CL8Pf1t1i1FUe6ssBGN+TWMkuGf+8tfShkvhChoepGbEGIvWvaBaVLKtfmO/VcI\nMRnYBERIKbOBGsDFfGViTftUoLE3KWH9GMjJuCVh5vvrj3M+OZ1lr7Shoqf2TEvm0WMkfvABmYcO\n4d6iBQEL5uPWyPo8Z1JKYlJjSMpMYlr7aTStYnFFcEVR7pHClgl4/07H70QI8ScQYOGQ5aUNLQuS\nUl4SQtQBIoUQR6SUZ4E3gQTABZiHNhqagnb/6HYWF24TQgwFhgIEBQVZKqKUpH2L4fT/oNv0vISZ\nvx6OZ+Xei4zsVJeH6/qhv3aNK7Nnc33lKhwrVaLaRx/h2/Mpqy6T5ZJSkpiRSFJmEv9u+m961Olh\now4pimKtIi+8IYTYL6VsVVg5KaV5TvabdSTmXtISQlQDLhdQxyXT6zkhxBagJXA236WwbCHEIiB3\n4ZJYIP8i74HApQLqnocWpAgNDS1wFVGlBOQmzKzdEcKHAhB3PZM3Vx+mec0KjO9cl2srV3Fl5kwM\naWlUfGEgVUaPxtHHp0gfc+rqKaZFTSM2LZYKrhUY3XK0LXqjKEoR3c0KTyUxbWc98CIwzfS6zuxD\nhKgIZEgps4UQfkBb4GPTsdwgJYBewNF89Y4WQqxAmwRwQ92fsTODHtYMB0cn6PV/4OCAwSgZv+IA\nRgmzmjoR99xzZB09ikdoKP7vvI3bA0V7mPJG9g2+PPAlq/5ZhY+LD7W8a+Hn7oeDsH4kpCiK7dxN\noPm1BD53GrBKCDEEiAH6AgghQoHhUspXgIbA10III1oGg2lSyuOm85cJIaqgBb2DQO5iI7+hTW0+\ngza9eXAJtFUpjp2fQWwU9FkAvjUA+DLyDP+cusj8zN1kD92IU5UqVJ8xA58nexRp+rHBaOCn0z/x\n+YHPSdWl0v+B/oxqMYrxm8fbqjeKotyFIgcaKeXbxf1Q04qcZo9nSyn3omWKRkq5C7B4F1dK2bmA\n/RIYVdz2KSUk/hBs+Qga985LmLn37GXOzF/EklO/46rXUenll/EbORJHL88iVb0vcR/ToqZx8upJ\nwgLCiAiPoH5F82WaFUWxP2uTaqZS8FLOr0kpz5V0w5QyLicLVg8FDz/oMROE4PJfUSRP+A8jr8Xh\n2qYNNSa/g2vdukWqNiE9gZn7ZrLh/AYCPAP4pOMnPFbrMfUgpqKUYtaOaGai3VRfjna56lm0GWWn\n0BJudrJF45QyLPIDLWHm8z+hTzeQ+H4EKevW4e7uS/bbU2nwfJ8iBYdsQzZLjy1l/pH5GIwGhjcf\nzstNXsbdyXxRM0VRShdrA003KWX+J+znCSF2SymnCCH+Y4uGKWXY+e3w1xxky8Fc2xXHlS/eRJ+Z\nxar6nQkYOYIR3ZpYXZWUki0Xt/Dxno+JTYula1BXXgt9jUDvQBt2QFGUkmRtoDEKIfoBuSlfnsl3\nTE0NVm7KugFrR5CeWYvE+WfIPvM7Dm0eZmyljlRpWI/JjzW2uqpzN87xcdTH7Ly0k7q+dZn36Dwe\nqv6QDRuvKIotWBtonkdLVvkVWmDZDQwUQrgD6mEFJU/OivFc3pBGSow7zjWyCPj8C1485UrS1Uy+\n698CRytWy0zTpTH30FyWnViGu5M7k8Im0b9Bf5wdnO9BDxRFKWnWJtU8B/yrgMM7Sq45ir0M3qjN\nBF/U7e7Ws5M6HVc/eZOk5buQeOI3cjiVh/6b6ZvPczjuHHMHtqaa753vpxilkfVn1/PZvs+4mnWV\nPvX6MKblGLUSpqKUcdbOOquPlgnZX0rZRAjRDHhKSjnVpq1TyoT0XbtImPI+uugYvOq44f/VWlyC\na7PjdBJfbz3Hc22C6NbEUjaim44mHeWjvz/icNJhmlVpxpwuc2jsZ/1lNkVRSi9rL53NB14HvgaQ\nUh4WQiwHVKC5j+VcukTitOmk/u9/OFd0IbBTKt4fbIIqtUlOy2bCqoOEVPXinR4FJ8RMykxi9v7Z\nrD2zFj93Pz5s9yE96vRQT/UrSjlibaDxkFJG3TYdVW+D9ihlgFGn4+o335A092sAqvRtTyVW4tBj\nGlR5ACklk346zPWMHBYPDsfdxXy1zBxjDstPLGfuoblkGbIY3GQww5oNw9O5aA9uKopS+lkbaJKE\nEHUxzTATQjyDSr1/X0rbto2E//6XnAsxeD/2GP7DBuC8tg8EdoTwYQB8u/sCf564zOQnG9Gounli\nzF1xu5i2Zxrnb5ynXY12TAqbRLBv8D3uiaIo94q1gWYUWqbjBkKIOOA82kw05T6hi40l8cOPSIuM\nxKV2bWouWIDXww/Cou7g4AS9vgIHB04lpDL11xN0eqAKg9sG31LHxdSLzNgzg80XNxPkHcScLnPo\nENjBPh1SFOWesTbQxAGLgM1AJSAFLevyFBu1S7nHnv3imLbR7db9xqwskucvIHnBAnB0pOrE16g0\naBDCxQW2fwoX/9YWMvMNJCvHwJjv9+Pj5swnfZvnPfmfkZPBgiMLWHJsCY4OjoxvNZ4XGr2Ai6PL\nPe6loij2YG2gWQdcB/ZTwPouSvkipSQtMpLEDz8iJy4Onye6U/WNN3AOMM0eiz8Mmz+CRr2gWT8A\nPvztBP8kprHk5XD8vFyRUvJ79O98svcTEjMSebLOk7za+lWqehS0oKqiKOWRtYEmUErZrfBiSnmg\ni44m4cMPSd+2HZeQugQtXozng/kyEOUlzKwMT84CIfjjeCJL/7rAK+1q07F+FU5dPcVHUR+xL3Ef\nDSs1ZEbHGbSs2tJ+nVIUxW6sDTS7hBBNpZRHbNqaMqa4DzmWNsIouTzrM65+8w3CxYWqEZOo9Pzz\nCOfbnsiP/ACunIDnfwSPSiSmZPHGj4doXN2Hfz/iz9TdU/nhnx/wdfHl3YfepXdIbxwdzGeeKYpy\nf7A20LQDXhJCnAey0TI4SyllM5u1TLE5mZODLiaG7DNn8bmajVdqDslff41vz6eoOnEiTlWqmJ8U\nvQP+mgOhL0O9RzEaJRNWHSQrR0/3h8/z9M9vkqZLY0CDAYxoPgJfV9973zFFUUoVawNN95L8UCFE\nJWAlEAxEA/2klNcslDMAuaOoGCnlU6b92wFv0/6qQJSUspcQohPa/aTzpmOrpZT3/YQFqdOZAsoZ\nss+cJfvsGXRnzpAdfQFycgCoAGS7OlB3ybd4tG5tuaKsFFgzAirVhse0Z3XnbT/H7rg91G78B18f\nO094QDgR4RHUq1jvHvVOUZTSztpcZxdK+HMjgE1SymlCiAjT+0kWymVKKVtYaE/73G0hxE9owSXX\ndinlkyXc3jJB6nToLly4GVDOnNGCSvQF0JuerxUC55o1ca1bF69OnXANCcGlbgjbX38J6SBoUVCQ\nAdgYASmx8PL/wMWTyNOnmH34AzyCD+HgVI2ZD82ka1BXtQiZoii3KPJSziWkJzcXS1sCbMFyoLkj\nIYQ30BkYXFINKwuMOh2689Hozp65JajoLlwAg0ErJATOQTVxrRuCd+cuuIbU1YJK7do4uJsnt5SF\nZVU+8TMcXAbtJ5JdvRnz98/l68PzcfKWvNxoGMNbDik1i5CVl3tmilJe2CvQ+Esp4wGklPFCiILm\nu7oJIfaipbuZJqVce9vx3mgjo5R8+x4SQhxCm4Y9UUp5zFLFQoihwFCAoKCgYnTFdozZ2eiio8k+\nfebm5a4zZ9HFxNwMKA4OuNSsiUu9ELwffRTXkBBcQ+pqAcXNzerPytAZCj6Ymgg/j0NWa8bmOm34\neG1P4tLi0Kc24dOu7/BEw4JzmSmKotgs0Agh/kRb7vl2bxWhmiAp5SUhRB0gUghxREp5Nt/xAcCC\nfO/3A7WklGlCiCeAtYDFmwVSynlo2Q4IDQ29q8XbCnrIsaiM2dnozp279XJXbkAxGrVCjo64BAXh\nGlIX726P41o3BNd6IbgEB+Pg6lq8BtyJlPDzWM4ZMpkeWItd216jqlstMi68wqiHuvNEw/q2+2xF\nUcoFmwUaKWXXgo4JIRKFENVMo5lqwOUC6rhkej0nhNgCtATOmuqoDISjjWpyy6fk2/5NCPGVEMJP\nSplUEn0qLmNWlimg5N6UP0v2mdPkXIy9NaDUqoVr/fr4PNEdl7p1cQ2ph0vtYBxcbPck/bTngoF8\n/5gmqXvmMzdpN8urV8X9xjmGNZ7A1z/70yKgAmM7h9isPYqilB/2unS2Hi2FzTTT67rbCwghKgIZ\nUspsIYQf0Bb4OF+RvsAvUsqsfOcEAIlSSimECAccgGTbdcMyY2Ym2efO5V3q0kYpZ8m5eFEbIQA4\nOeESXAu3Bg3x7fGkNjqpWxfX4GAtvYudGaWRdYcW8tnR2Vzz9aFPSG9GthjN8CWngDQ+698CJ0eV\nyl9RlMLZK9BMA1YJIYYAMWhBAyFEKDBcSvkK0BD4WghhRAsY06SUx/PV8aypnvyeAUYIIfRAJvCs\nlPKuLotZQxglzjoj19euvSWo5MTF3Qwozs64BtfCrVEjfJ966uZN+aCgUhFQLDl85TAf/f0hR5OP\n0dxg5KvOX9A4uDMz/3eK/THX+XxAS2pW8rB3MxVFKSOEDX8PlxmhoaFy7969RT5ve4eW+F02Daic\nnXENDr45Mgmpp92UDwoyf7K+FGqz6Gkkeh6r15R1Z9dRxdGdCfEX6fHoTESLAfx9LpkB83fTp1Ug\nn/Rtbu/mKopSCggh9kkpQwsrZ68RTbmQ7e7IFX832iz6SQsoTmXjn1Nv1HM54zJxaXHEpsZyKf0S\n2SIeA+n8ej6Gl4P/xdBt8/Gs3w2aP8uNjBxeXXmQoEoevPeUWl5ZUZSiKRu/GUspg5MDmV4OuNap\nY++m3MIojSRlJnEp7RKxabHEpcZxKf0ScalxxKbFkpieiF7eXCBVIHBE4m2E7//1A7VWvgjuFeHJ\nz5DAm2sOczk1m59GPIyXq/qWURSlaNRvjTJISsn17OvaiCQtlktpWhCJS9O+LqVdQmfU3XKOn7sf\n1b2q06xKMwJrB1Ldqzo1vGoQ6BVIgGcAzy8MA6DWvqVw+biWMNOzMiujYvjtSAIR3RvQvGYFe3RX\nUZQyTgWaUipVl5oXOHKDSO4I5VLaJTL0GbeU93X1pYZXDepVrEenmp2o4VUj76u6V3XcnAp/eLNh\ndibs+hJaD4Z6j3Lmchrv/3yctiGVGdq+dI3aFEUpO1SgKYYVY7T7FY/fxbmZ+kxtJJJ7n8S0nfuV\noku5pbynsyc1vGpQ07smD1Z7MC+A5AYTLxevYvXF3Whk1PUkqBgMj00lW29g7PcHcHN2YGa/FjgU\nlqJGURSlACrQ2EiOIUe7L5JvVJIXWNJiuZp19Zbybo5uVPeqfvPylpfp8pa3dnnLx8XHdskqDTmM\nvn4FP4Me+swDVy9m/HKc4/EpLBgUir+P9alsFEVRbqcCTTHojXoy9BmsOb0m72Z7bmC5nHEZyc2p\n404OTlTzrEYNrxo8UvORm5e2vLXXym6V7ZP12JADP75MWFYG3/hU4uWa4Ww5dZkFO84z6KFadG3k\nf+/bpChKuaICTTGk6FI4d+Mck3dNxkE44O/hTw2vGrSp1oZAr0BqeNegumd1Ar0DqeJepfStMmnQ\nw0+vwIn1LPGpxEYvX/6Vms3EHw7xgL83/3miob1bqChKOaACTTF4O3tTv0J9Puv8GQGeATg7lP4H\nM/MY9LD633B8LTw2lV+PLkRKwes/HiIlS8+yVx7EzbmUBUZFUcoklayqGJwdnfFx9aGmd82yF2TW\nDINjq6Hr+/DwGAASUx5ky6krvN2jIQ8EeBdSiaIoinVUoLnfGA2wdgQc/RG6vAvtxgOQnl2Ni8nd\n6NqwKi88WMvOjVQUpTxRgeZ+YjTA2pFwZBV0fhvaTwDg2KUbnEgYgnDK5uNnmqulmBVFKVEq0Nwv\njEZYPwYOr4BH3oIOrwOwN/oqz87bDcJAxZobqORZOjNKK4pSdqnJAPcDoxF+HgMHl0GnN6HjGwBs\n++cKw77dRzVfN1x9fsXROd3ODVUUpTxSI5ryzmiEX8bBge/g/9u78+iqynOP498fowItMgnIrMQy\nKaAxQIE6gIrYIlqsA48kLuQAABFESURBVCogKWBra73iVLxynZZarF6HhTILFhEEClbQGwYVtSqJ\nzDIUxFaxCFEBRUGGPPeP86aN9ARCknP2SXg+a5119n7Pu/d53gXJkz09709ug3PuAGD+6q0MnpxN\ni7rVmTGsiycZ51zCRJZoJNWWtEDSxvBeq5B+TSVlSVonaa2k5qG9haT3wvbTJVUJ7VXD+qbwefNk\njSnl5OXBvJth2RToPhzO/T0AM7I/4cbnl9G+8QlMG9KZujWqRhyoc648i/KI5g5gkZmlAYvCejxT\ngFFm1hrIALaH9oeBx8L2O4DBoX0wsMPMWgKPhX7HHjOYPxzefxa63Ry7+C8x/s3N3DZrFd3S6jFl\ncAY1jy9Dt2U758qkKBPNJcDksDwZ6HtoB0ltgEpmtgDAzHab2beK3RZ1HjAzzvYF9zsT6KFj7TYq\nM5h/K+RMgK43QY+RGPBo1gbun7eO3qc1YPx16VSr4pfonHOJF2WiqW9mWwHC+4lx+pwK7JQ0W9Jy\nSaMkVQTqADvN/jV71xagUVhuBHwS9nsA2BX6HxvM4JXbIXscdLkRet5DnsE9f1nLE4s3cUV6E568\n6gyqVPLLc8655Ejon7SSFgIN4nw0ooi7qAR0BzoCHwPTgYHAS3H65lewjHf0Yoc2SBoCDAFo2rRp\nEcNJcWbw6p2wdAx0/jVccD8H8ozbZq1i9rJPyezWghEXt/bnZJxzSZXQRGNmPQv7TNI2SQ3NbKuk\nhvz72ktBW4DlZrY5bDMH6AxMBE6QVCkctTQG/llgmybAFkmVgJrAl4fu2MzGAmMB0tPT/yMRlTlm\nkHUXvPc0dLoBLnyAvQfy+O205WSt3cYt55/Kjee19CTjnEu6KM+fvAQMCMsDgLlx+mQDtSTVC+vn\nAWvNzIDXgH5xti+4337A4tC//DKDBf8N7zwFGUOh14N8s+8g1z+bTdbabdzTpy2/6ZHmScY5F4ko\nrwY/BMyQNJjYabHLASSlA8PMLNPMDkoaDiwKF/TfB8aF7W8HXpB0P7AcmBDaJwDPSdpE7EjmyqSN\nKApmsHAk/PVJOCsTLnqYnXv2M3BSNqs/3cWjv2jPZWc0PuJumu8bnoRgnXPHosgSjZl9AfSI054D\nZBZYXwCcHqffZmK3Ox/avpeQtMo9M1h0L7z9OKRfD70fYfvX33HthKV89Pk3PN3/DC5oG+8SmXPO\nJY/f31pWmcHi++GtR+HMgdD7j3yyYw/XTHiP3K+/Y9Kgs+jasm7UUTrnnCeaMuv1B+HNR+CM6+Di\nx9iY+w3XTHiPvfvzmJrZiY5N4xZacM65pPNEUwKTek2K5otffwjeeBg6XAM/fZxV//yKAROXUqli\nBWYM7eKTljnnUoonmrLmjVGxo5kO/aHPk7zz0Q5+OSWHWtUr86fBnWhWp3rUETrn3Pd4oilLljwC\nr90Pp18JfZ5k0YZcbpi6jGa1q/Hc4E40qHlc1BE659x/8ERTVrz1GCy+D077BfQdzdxVn3HLjJW0\nOemHTB6UQa0STlg2fWiXUgrUOee+zwtelQVvPw4L/wfa9YNLn+G5pVv43fQVpDevxdTMTiVOMs45\nl0h+RJPq/voULLgb2l4Gl45h9JKP+MOrG+jZ+kSeuvoMjqtcMeoInXPusDzRpLJ3RkPWCGjTF7ts\nLA9lbWTMG5u5pMNJPHJ5eypX9ANS51zq80STqt59Bv7vTmjdh4OXjuOuueuZtvRjrunclHv7tKNC\nBa9b5pwrGzzRpKKl4+DV26HVT9nXdzz/9eIaXl61lV+dcwq3XvgjL47pnCtTPNGkmuzxsSmYf3Qx\ney4Zz6+eX8lrG3K586JWDD37lKijc865o+aJJpXkTIR5t8CpF/FVn3FkTl5B9j++5MHLTuOqjHIy\nOZtz7pjjiSZVvP8svHwzpF3IF73HMmDiMtZv/ZonruzIz9qfFHV0zjlXbJ5oUsGy5+AvN0HaBWzt\nNZZrJixjy449jLsunXNbnRh1dM45VyKeaKK2fCq89Bto2ZO/93iG/uOW8dWe/Tw3uBMZLWpHHZ1z\nzpVYJA9iSKotaYGkjeE9bk17SU0lZUlaJ2mtpOahfaqkDZLWSJooqXJoP0fSLkkrwuvu5I2qGFZM\ng7m/hlPOZf3ZT9Nv/HL27D/ItCGdPck458qNqJ74uwNYZGZpwKKwHs8UYJSZtSY2m+b20D4VaAWc\nBhxPgRk5gTfNrEN43ZuQ6EvDyukw5wY4+WyW/Xg0v5iwnMoVxYyhXWjXqGbU0TnnXKmJKtFcAkwO\ny5OBvod2kNQGqBSmcsbMdpvZt2F5vgXAUqBxcsIuJatehDnDoEV33j7rSfo/u5La1avw4rAutDyx\nRtTROedcqYoq0dQ3s60A4T3eFe9TgZ2SZktaLmmUpO8V9gqnzK4FXi3Q3EXSSkmvSGpbWACShkjK\nkZSTm5tb8hEV1eqZ8Och0KwrWe0fZ9CfPqBZnWq8OOzHNK5VLXlxOOdckiTsZgBJC4EGcT4aUcRd\nVAK6Ax2Bj4HpwEBgQoE+o4ElZvZmWF8GNDOz3ZJ6A3OAtHg7N7OxwFiA9PR0K2JMJbNmNsz+JTT9\nMbNb/ZHh09fRockJTBqYQc1qlZMSgnPOJVvCEo2Z9SzsM0nbJDU0s62SGvLvay8FbQGWm9nmsM0c\noDMh0UgaCdQDhhb4zq8KLM+XNFpSXTP7vFQGVRIfzIFZmdCkM1Na/IG752yie1pdxlx7JtWq+M1/\nzrnyK6pTZy8BA8LyAGBunD7ZQC1J9cL6ecBaAEmZwIXAVWaWl7+BpAYKhcAkZRAb3xcJGcHRWPsS\nzLwea3wWT530IHe/+nd6tW3A+AHpnmScc+VeVInmIeB8SRuB88M6ktIljQcws4PAcGCRpNWAgHFh\n+2eA+sA7h9zG3A9YI2kl8ARwZbhhIDrrXoaZg7BG6TxY+z4eef1T+p3ZmKeu7kjVSj6XjHOu/FPU\nv4dTQXp6uuXk5JT+jtfPhxnXYg07MqLGvTy/cgfXd23BXRe39jL/zrkyT9L7ZpZ+pH5+3iZRNrwK\nM64jr8Hp3Fz5Luau3MHNPU/ltz1aepl/59wxxRNNIvwtC2Zcy8H67biBu8ha/w0jf9aGQV1bRB2Z\nc84lnSea0rZxIUzvz4G6rRmw/07e+XQvj1zenn5nlq1nSp1zrrR4oilNmxbCC1ezv04rrtpzB6u+\nyGN0/zPp1S7e40TOOXds8ERTEpMujr0PmgcfLoYX+rOvVho/330rH+6uwMSB6XRLqxttjM45FzFP\nNKVh8+sw7Sq+q3kyP9t1K5/tr8pzgzM4s1ncotTOOXdM8URTUnt3wvNXsucHzen95S18XbEG04dm\n0LrhD6OOzDnnUoInmpLYuwu2r+Xbmi258Mvh5B1fm5mZnWhet3rUkTnnXMrwRFMCm77YS3WrzWWf\n30K1WvX4U2YnGtY8PuqwnHMupURVgqZceONgO7rtfYy69RszY2gXTzLOOReHJ5oSOKXiNrpXXsfz\nv+xEnRpVow7HOedSkieaEjinUQWePXkJPzjO55JxzrnC+DWakhg0L+oInHMu5fkRjXPOuYTyROOc\ncy6hIkk0kmpLWiBpY3iP+wi9pKaSsiStk7RWUvPQ/qykj8KkZyskdQjtkvSEpE2SVkk6I3mjcs45\nF09URzR3AIvMLA1YFNbjmQKMMrPWQAawvcBnt5pZh/BaEdouAtLCawjwdEKid845V2RRJZpLgMlh\neTLQ99AOktoAlcxsAYCZ7Tazb4uw3ykW8y5wgqSGpRi3c865oxRVoqlvZlsBwvuJcfqcCuyUNFvS\nckmjJFUs8PkD4fTYY5LyH2JpBHxSoM+W0Oaccy4iCUs0khZKWhPndUkRd1EJ6A4MB84CTgYGhs/u\nBFqF9trA7flfG2c/Vkh8QyTlSMrJzc0tYkjOOeeOVsKeozGznoV9JmmbpIZmtjWc2toep9sWYLmZ\nbQ7bzAE6AxPyj4aA7yRNIpaM8rdpUmAfjYF/FhLfWGAsQHp6etxk5JxzruSiOnX2EjAgLA8A5sbp\nkw3UklQvrJ8HrAXIv+4iScSu76wpsN/rwt1nnYFdBZKSc865CMgs+X/MS6oDzACaAh8Dl5vZl5LS\ngWFmlhn6nQ/8kdgpsfeBIWa2T9JioF5oXxG22R0Sz1NAL+BbYJCZ5RQhnlzgH8UcTl3g82Jum2p8\nLKmpvIylvIwDfCz5mplZvSN1iiTRlCeScswsPeo4SoOPJTWVl7GUl3GAj+VoeWUA55xzCeWJxjnn\nXEJ5oim5sVEHUIp8LKmpvIylvIwDfCxHxa/ROOecSyg/onHOOZdQnmhKgaT7QjmcFaHa9ElRx1Rc\nodTP+jCeP0s6IeqYikvS5ZI+kJQXbp0vUyT1krQhVCMvrPBsypM0UdJ2SWuO3Du1SWoi6bVQUf4D\nSTdFHVNxSDpO0lJJK8M47kno9/mps5KT9EMz+yos/xZoY2bDIg6rWCRdACw2swOSHgYws9uPsFlK\nktQayAPGAMOL8kxVqgh1/f4GnE+s4kU2cJWZrY00sGKQ9BNgN7GCt+2ijqckwsPiDc1smaQfEHu+\nr29Z+3cJzxxWD88fVgbeAm4KxYhLnR/RlIL8JBNUp5D6amWBmWWZ2YGw+i6xMj5lkpmtM7MNUcdR\nTBnAJjPbbGb7gBeIVScvc8xsCfBl1HGUBjPbambLwvLXwDrKYOHeUOF+d1itHF4J+73liaaUSHpA\n0idAf+DuqOMpJdcDr0QdxDHKK5GnuDARY0fgvWgjKR5JFSWtIFZrcoGZJWwcnmiK6EjVqM1shJk1\nAaYCN0Yb7eEVpbK2pBHAAWLjSVmlUCU8VRW5ErlLPkk1gFnA7w45o1FmmNlBM+tA7KxFhqSEndZM\nWPXm8uZw1agP8TwwDxiZwHBK5EhjkTQA+CnQw1L8It5R/LuUNUWuRO6SK1zTmAVMNbPZUcdTUma2\nU9LrxGpEJuSGDT+iKQWS0gqs9gHWRxVLSUnqRWx+nz5FmNHUJU42kCaphaQqwJXEqpO7CIWL6BOA\ndWb2aNTxFJekevl3lEo6HuhJAn9v+V1npUDSLOBHxO5w+gexatKfRhtV8UjaBFQFvghN75bhO+gu\nBZ4kVul7J7DCzC6MNqqik9Qb+F+gIjDRzB6IOKRikTQNOIdYleBtwEgzmxBpUMUkqRvwJrCa2M87\nwO/NbH50UR09SacDk4n936oAzDCzexP2fZ5onHPOJZKfOnPOOZdQnmicc84llCca55xzCeWJxjnn\nXEJ5onHOOZdQnmicSxJJu4/c67Dbz5R0cliuIWmMpA9D9d0lkjpJqhKW/WFslzI80ThXBkhqC1Q0\ns82haTyxQpVpZtYWGAjUDQU4FwFXRBKoc3F4onEuyRQzKtRkWy3pitBeQdLocITysqT5kvqFzfoD\nc0O/U4BOwF1mlgcQqjzPC33nhP7OpQQ/vHYu+S4DOgDtiT0tny1pCdAVaA6cBpxIrAT9xLBNV2Ba\nWG5LrMrBwUL2vwY4KyGRO1cMfkTjXPJ1A6aF6rnbgDeIJYZuwItmlmdmnwGvFdimIZBblJ2HBLQv\nTMzlXOQ80TiXfPGmADhcO8Ae4Liw/AHQXtLhfn6rAnuLEZtzpc4TjXPJtwS4Ikw8VQ/4CbCU2HS6\nPw/XauoTK0SZbx3QEsDMPgRygHtCNWEkpeXPwSOpDpBrZvuTNSDnDscTjXPJ92dgFbASWAzcFk6V\nzSI2D80aYAyxmRt3hW3m8f3Ekwk0ADZJWg2M49/z1ZwLlKlqwq588+rNzqUQSTXMbHc4KlkKdDWz\nz8KcIa+F9cJuAsjfx2zgTjPbkISQnTsiv+vMudTycpiQqgpwXzjSwcz2SBoJNAI+LmzjMEnaHE8y\nLpX4EY1zzrmE8ms0zjnnEsoTjXPOuYTyROOccy6hPNE455xLKE80zjnnEsoTjXPOuYT6f2Ux20CP\nwf/7AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc57ee10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#画图\n",
    "x_axis=np.log10(Cs)\n",
    "for i, value in enumerate(penaltys):\n",
    "    plt.errorbar(x_axis,test_scores[:,i],yerr=test_stds[:,i],label=penaltys[i]+\"Test\")\n",
    "    plt.errorbar(x_axis,train_scores[:,i],yerr=train_stds[:,i],label=penaltys[i]+\"Train\")\n",
    "\n",
    "plt.legend()\n",
    "plt.xlabel(\"log(C)\")\n",
    "plt.ylabel(\"neg-logloss\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从不同正则参数C与不同正则函数类别的图示可看出，模型在训练集上的表现略优于测试集，无论是L1正则还是L2正则，模型性能随C的增大而快速提升，随后趋缓与保持稳定"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### LogisticRegressionCV"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=[0.001, 0.01, 0.1, 1, 10, 100, 1000],\n",
       "           class_weight=None, cv=5, dual=False, fit_intercept=True,\n",
       "           intercept_scaling=1.0, max_iter=100, multi_class='ovr',\n",
       "           n_jobs=1, penalty='l1', random_state=None, refit=True,\n",
       "           scoring='neg_log_loss', solver='liblinear', tol=0.0001,\n",
       "           verbose=0)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#利用L1正则化的LogisticRegressionCV实现不同超参数的模型性能交叉验证，进行超参数集合选取后进行数据训练\n",
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "Cs=[0.001,0.01,0.1,1,10,100,1000]\n",
    "lrcv_l1=LogisticRegressionCV(Cs=Cs,cv=5,scoring='neg_log_loss',penalty='l1',solver='liblinear')\n",
    "lrcv_l1.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1: array([[-0.6388981 , -0.60803426, -0.54226306, -0.48755441, -0.48690804,\n",
       "         -0.48691591, -0.48691045],\n",
       "        [-0.64310631, -0.61904541, -0.55366784, -0.52752444, -0.52852897,\n",
       "         -0.52878089, -0.5287523 ],\n",
       "        [-0.63999964, -0.58013036, -0.50340787, -0.45967514, -0.45881223,\n",
       "         -0.45877154, -0.45878661],\n",
       "        [-0.64124698, -0.57657228, -0.49995464, -0.42818455, -0.42392069,\n",
       "         -0.42354382, -0.42352139],\n",
       "        [-0.64040953, -0.57775209, -0.50336175, -0.47769569, -0.48097404,\n",
       "         -0.48141552, -0.48149983]])}"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#显示L1正则交叉验证后各模型的性能得分\n",
    "lrcv_l1.scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc57b160>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#画图显示不同C的取值对L1正则模型性能的影响\n",
    "scores=np.mean(lrcv_l1.scores_[1],axis=0)\n",
    "plt.plot(np.log10(Cs),scores,label=\"lrcv_l1\")\n",
    "plt.legend()\n",
    "plt.xlabel(\"log(C)\")\n",
    "plt.ylabel(\"neg-logloss\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "模型在log(C)=0时达到最大值，与之前利用GridSearchCV得到的L1正则的橙色与蓝色曲线得到的最佳C取值基本一致。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.13274866,  0.03766619, -0.01112406,  0.00648943, -0.00129775,\n",
       "         0.09220038,  0.87191975,  0.01243369]])"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#显示各特征的系数\n",
    "lrcv_l1.coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=[0.001, 0.01, 0.1, 1, 10, 100, 1000],\n",
       "           class_weight=None, cv=5, dual=False, fit_intercept=True,\n",
       "           intercept_scaling=1.0, max_iter=100, multi_class='ovr',\n",
       "           n_jobs=1, penalty='l2', random_state=None, refit=True,\n",
       "           scoring='neg_log_loss', solver='liblinear', tol=0.0001,\n",
       "           verbose=0)"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#利用L1正则化的LogisticRegressionCV实现不同超参数的模型性能交叉验证，进行超参数集合选取后进行数据训练\n",
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "Cs=[0.001,0.01,0.1,1,10,100,1000]\n",
    "lrcv_l2=LogisticRegressionCV(Cs=Cs,cv=5,scoring='neg_log_loss',penalty='l2',solver='liblinear')\n",
    "lrcv_l2.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1: array([[-0.60613293, -0.60850267, -0.57731541, -0.50621855, -0.48802354,\n",
       "         -0.48698804, -0.48698067],\n",
       "        [-0.61611328, -0.60802259, -0.57882142, -0.52714048, -0.52554609,\n",
       "         -0.52800606, -0.52839263],\n",
       "        [-0.57520807, -0.56344998, -0.53656855, -0.4774384 , -0.46015281,\n",
       "         -0.45887521, -0.45877151],\n",
       "        [-0.5740564 , -0.56760656, -0.53144555, -0.45143155, -0.42614786,\n",
       "         -0.42376475, -0.4237598 ],\n",
       "        [-0.5703686 , -0.56128741, -0.53317742, -0.48231172, -0.47897203,\n",
       "         -0.48116907, -0.48117349]])}"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#显示L2正则交叉验证后各模型的性能得分\n",
    "lrcv_l2.scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc57e588>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#画图显示不同C的取值对L2正则模型性能的影响\n",
    "scores=np.mean(lrcv_l2.scores_[1],axis=0)\n",
    "plt.plot(np.log10(Cs),scores,label='lrcv_l2')\n",
    "\n",
    "plt.legend()\n",
    "plt.xlabel(\"log(C)\")\n",
    "plt.ylabel(\"neg-logloss\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "模型在log(C)=1时达到最大值，与之前利用GridSearchCV得到的L2正则的红色与绿色曲线得到的最佳C取值基本一致。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
